<?
require_once('class/conexion/conexion.php');
require_once('database/DBRed.php');




class DBNodo
{

	public $mConexion = null;

	public function __construct() 
	{
		$this->mConexion = new Conexion($this);
		
	}	
		
	public function listarNodos($idRed, $tiempo)
	{
		$sql ="SELECT * FROM NODO WHERE ID_RED = ".$idRed." AND TIEMPO = ".mysql_real_escape_string($tiempo)." AND BORRADO=FALSE";
		return $this->mConexion->sql($sql);
	}
	
	public function seleccionarNodo($idNodo)
	{
		$sql =" SELECT * FROM NODO WHERE ID = ".mysql_real_escape_string($idNodo)."";
		return $this->mConexion->sql($sql);
	}
	
	public function seleccionarNodoNombre($nombre)
	{
		$sql =" SELECT * FROM NODO WHERE NOMBRE = ".mysql_real_escape_string($nombre)."";
		return $this->mConexion->sql($sql);
			
	}
	
	
	public function nuevoNodo($idRed, $nombre, $tiempo)
	{
		$sql ="INSERT INTO NODO(ID_RED, NOMBRE, TIEMPO) 
						VALUES ('".mysql_real_escape_string($idRed)."',
								'".mysql_real_escape_string($nombre)."',
								 ".mysql_real_escape_string($tiempo).")";
		return $this->mConexion->sql($sql);
	}
	
	public function idNodo($nombre)
	{
		$sql="SELECT ID FROM NODO where NOMBRE = '".mysql_real_escape_string($nombre)."'";
		return $this->mConexion->sql($sql);
	}
	
	public function borradoLogico($idNodo, $tiempo)
	{
		$sql[]="UPDATE NODO SET  BORRADO =  '1' 
				WHERE  ID =".mysql_real_escape_string($idNodo)." 
				AND  TIEMPO =".mysql_real_escape_string($tiempo)." ";
		
		$sql[]="DELETE FROM VALOR_ATRIBUTO WHERE 
					(ID_ORIGEN=".mysql_real_escape_string($idNodo)."
					AND TIPO_ORIGEN = 'NODO'
					AND TIEMPO = ".mysql_real_escape_string($tiempo).")
					OR
					(ID_ORIGEN IN (
						SELECT ID
						FROM ENLACE
						WHERE ID_ORIGEN=".mysql_real_escape_string($idNodo)." 
							OR ID_DESTINO=".mysql_real_escape_string($idNodo)." 
							AND TIEMPO=".mysql_real_escape_string($tiempo).")
						)";
				
		$sql[]="DELETE FROM ENLACE WHERE ID_ORIGEN=".mysql_real_escape_string($idNodo)." 
				OR ID_DESTINO=".mysql_real_escape_string($idNodo)." 
				AND TIEMPO=".mysql_real_escape_string($tiempo)."";
		
		$this->mConexion->sql($sql);
	}
	
	public function borradoFisico($idNodo, $tiempo)
	{
		$sql[]="DELETE FROM NODO 
				WHERE  ID =".mysql_real_escape_string($idNodo)." 
				AND  TIEMPO =".mysql_real_escape_string($tiempo)." ";
		
		$sql[]="DELETE FROM VALOR_ATRIBUTO WHERE 
					(ID_ORIGEN=".mysql_real_escape_string($idNodo)."
					AND TIPO_ORIGEN = 'NODO'
					AND TIEMPO = ".mysql_real_escape_string($tiempo).")
					OR
					(ID_ORIGEN IN (
						SELECT ID
						FROM ENLACE
						WHERE ID_ORIGEN=".mysql_real_escape_string($idNodo)." 
							OR ID_DESTINO=".mysql_real_escape_string($idNodo)." 
							AND TIEMPO=".mysql_real_escape_string($tiempo).")
						)";
				
		$sql[]="DELETE FROM ENLACE WHERE ID_ORIGEN=".mysql_real_escape_string($idNodo)." 
				OR ID_DESTINO=".mysql_real_escape_string($idNodo)." 
				AND TIEMPO=".mysql_real_escape_string($tiempo)."";
		
		$this->mConexion->sql($sql);
	}
	
	public function idMaxNodo()
	{
		$sql="SELECT MAX( ID ) FROM  `nodo`";
		return $this->mConexion->sql($sql);
	}
	
	public function nodo()
	{
		$sql=" SELECT MAX(ID) AS ID FROM NODO";
		
		$idNodo=mysql_fetch_array($this->mConexion->sql($sql));
		
		$nodoNuevo=$idNodo['ID'];
		
		$nodoNuevo++;
		
		return $nodoNuevo;
	}
	
	public function buscarNodo($idNodo, $tiempo)
	{
		$sql ="SELECT * FROM NODO WHERE ID = ".$idNodo." AND TIEMPO = ".mysql_real_escape_string($tiempo)." AND BORRADO=FALSE";
		return $this->mConexion->sql($sql);
	}

	public function obtenerAnnadidos($t1, $t2, $red)
	{
		$sql ="SELECT ID AS ID_NODO, NOMBRE
				FROM NODO WHERE 
				TIEMPO = ".$t2." AND ID NOT IN (
					SELECT ID 
					FROM NODO 
					WHERE TIEMPO = ".$t1."
					AND ID_RED = ".$red.")
				AND ID_RED = ".$red;
		return $this->mConexion->sql($sql);
	}
	
	public function obtenerModificados($t1, $t2, $red)
	{
		$sql ="SELECT V1.ID_ORIGEN AS ID_NODO, V1.VALOR AS VALOR_OLD, 
					V2.VALOR AS VALOR_NEW, ATRIBUTO.NOMBRE AS NOMBRE_ATRIBUTO, NODO.NOMBRE AS NOMBRE  
				FROM VALOR_ATRIBUTO AS V1, VALOR_ATRIBUTO AS V2, NODO, ATRIBUTO 
				WHERE
					V1.TIPO_ORIGEN = 'NODO'
					AND V2.TIPO_ORIGEN = 'NODO'
					AND V1.ID_ORIGEN = V2.ID_ORIGEN
					AND V1.ID_ATRIBUTO = V2.ID_ATRIBUTO
					AND V1.VALOR <> V2.VALOR
					AND V1.TIEMPO = ".$t1."
					AND V2.TIEMPO = ".$t2."
					AND NODO.ID = V1.ID_ORIGEN
					AND ATRIBUTO.ID = V1.ID_ATRIBUTO
					AND NODO.ID_RED = ".$red."
					AND NODO.TIEMPO = ".$t1;
		return $this->mConexion->sql($sql);
	}
	
	public function obtenerEliminados($t1, $t2, $red) 
	{
		$sql ="SELECT N1.ID AS ID_NODO, N1.NOMBRE AS NOMBRE
				FROM NODO N1, NODO N2
				WHERE N1.ID = N2.ID
				AND N1.TIEMPO = ".$t1."
				AND N2.TIEMPO = ".$t2."
				AND N1.BORRADO = 0
				AND N2.BORRADO = 1
				AND N1.ID_RED = ".$red;
		return $this->mConexion->sql($sql);
	}
	
	public function contarNodosXNombre($nombre, $red) {
		$sql ="SELECT COUNT(*) AS TOTAL FROM NODO WHERE NOMBRE = '".$nombre."' AND ID_RED = ".$red;
		return $this->mConexion->sql($sql);
	}
	
}
?>